#[255]为了便于统计，通过正则提取出版时间的年份
import pandas as pd
import re
import  numpy as np
file_path = "豆瓣高评分书籍信息.xlsx"
df = pd.read_excel(file_path)
def extract_year(pub_time) :
    if pd.isna(pub_time) or not isinstance(pub_time, str):
        return None
    match = re.search(r'\b\d{4}\b', pub_time)
    if match:
        return match.group()
    else:
        return "未提取到年份"
df["年份"] = df["出版时间"].apply(extract_year)
cols = df.columns.tolist()
pub_time_index = cols.index("出版时间")
cols.insert(pub_time_index + 1, cols.pop(cols.index("年份")))
df = df[cols]
df.to_excel("提取年份后的书籍数据.xlsx", index=False)
print("年份提取完成，已新增‘年份’列！")
#[256]
print(df.head())
#[257]将出版时间转换为整数型
file_path = "豆瓣高评分书籍信息.xlsx"
df = pd.read_excel(file_path)

def extract_year_to_int(pub_time):
    if pd.isna(pub_time) or not isinstance(pub_time, str):
        return None
    match = re.search(r'\b\d{4}\b', pub_time)
    if match:
        try:
             return int(match.group())
        except:
            return"转换失败"
        else:
            return"未找到年份"
df["出版时间"] = df["出版时间"].apply(extract_year_to_int)
df.to_excel("出版时间替换为整型的书籍数据.xlsx", index=False)
print("原‘出版时间’列已替换为整数年份！")
#[258]
print(df.head())
#[259]
print(df.shape)
#[260]转换评分及平均数量的数据类型
df['评分']=df['评分'].astype(float)
def clean_comment_count(value):
    if pd.isnull(value):
        return np.nan
    value_str = str(value).strip()
    match = re.search(r'\d+', value_str)
    if match:
        return int(match.group())
    else:
        return np.nan
df['评论数量'] = df['评论数量'].apply(clean_comment_count)
df['评论数量'] = df['评论数量'].astype('Int64')
df.to_excel('转换评分及评论数量数据类型的书籍信息.xlsx', index=False)
